import { typedHttp } from '@/utils/typedHttp';
import type { AssessmentType, TemplateTable, CheckItemTemplate } from '@/types/template';

export const templateApi = {
  /**
   * 创建新模板
   * @param name 模板名称
   * @param description 模板描述
   * @param assessmentType 评估类型
   * @param items 模板项列表
   * @param defaultMaturityLevel 默认成熟度等级（仅用于105评估类型）
   * @returns 创建的模板
   */
  async createTemplate(
    name: string, 
    description: string, 
    assessmentType: AssessmentType,
    items: Omit<CheckItemTemplate, 'id'>[],
    defaultMaturityLevel?: number
  ): Promise<TemplateTable> {
    const requestBody: any = {
      name,
      description,
      assessment_type: assessmentType,
      version: '1.0.0', // 默认版本号
      items,
    };

    // 仅当是数据安全评估且提供了默认成熟度等级时才添加该字段
    if (assessmentType === '105' && defaultMaturityLevel !== undefined) {
      requestBody.default_maturity_level = defaultMaturityLevel;
    }

    const response = await typedHttp.post('/compliance-templates/', requestBody);
    
    return {
      ...response,
      items: response.items || [], // 新创建的模板没有项
    };
  },

  /**
   * 获取模板详情
   * @param templateId 模板ID
   * @returns 模板详情
   */
  async getTemplate(templateId: string): Promise<TemplateTable> {
    return typedHttp.get(`/compliance-templates/${templateId}`, {
      params: { include_items: true }
    });
  },

  /**
   * 更新模板
   * @param templateId 模板ID
   * @param updates 更新字段
   * @returns 更新后的模板
   */
  async updateTemplate(
    templateId: string,
    updates: Partial<Pick<TemplateTable, 'name' | 'description' | 'assessment_type'>>
  ): Promise<TemplateTable> {
    return typedHttp.put(`/compliance-templates/${templateId}`, updates);
  },

  /**
   * 删除模板
   * @param templateId 模板ID
   */
  async deleteTemplate(templateId: string): Promise<void> {
    await typedHttp.delete(`/compliance-templates/${templateId}`);
  },

  /**
   * 获取模板列表
   * @param params 查询参数
   * @returns 模板列表
   */
  async getTemplates(params?: {
    name?: string;
    assessment_type?: string;
    version?: string;
    skip?: number;
    limit?: number;
  }) {
    return typedHttp.get<{ total: number; items: TemplateTable[] }>('/compliance-templates/', { params });
  },

  /**
   * 根据评估计划ID和标题获取模板项列表
   * @param assessmentPlanId 评估计划ID
   * @param title 检查项标题
   * @returns 该标题下所有成熟度等级的模板项列表
   */
  async getTemplateItemsByAssessmentPlan(
    assessmentPlanId: string,
    title: string
  ): Promise<CheckItemTemplate[]> {
    return typedHttp.get(`/compliance-templates/assessment-plan/${assessmentPlanId}/items`, {
      params: { title }
    });
  },
};
